// 封装axios的获取
// 1.封装了baseUrl 根路径网址
// 2.封装了获取数据的过期时间
// 3.封装了请求拦截和响应拦截
// 4.封装了数据获取到之前的旋转小图标
// 5.数据如果没有获取到的报错信息
import Vue from "vue";
import axios from "axios";
// 引入报错的全局方法
import { Loading, Message } from "element-ui";
import store from "@/store/index.js";

const service = axios.create({
  baseURL: process.env.VUE_APP_API_URL, //"http://localhost:3007",
  timeout: 10000,
});

// 创建保存旋转小图标的变量
let loadObj = null;

// 请求拦截
service.interceptors.request.use(
  (config) => {
    if (!loadObj) {
      loadObj = Loading.service({
        lock: true,
        target: "#loading",
        text: "加载中.....",
        spinner: "el-icon-loading",
        background: "rgba(0,0,0,0.5)",
      });
    }
    // 假设有token，需要设置 token 令牌
    config.headers["user-token"] = store.getters.token;
    return config;
  },
  (error) => {
    Vue.nextTick(() => {
      // 以服务的方式调用的 Loading 需要异步关闭
      loadObj.close();
    });
    return Promise.reject(error);
  }
);

// 响应拦截
service.interceptors.response.use(
  (response) => {
    setTimeout(() => {
      Vue.nextTick(() => {
        // 以服务的方式调用的 Loading 需要异步关闭
        loadObj.close();
      });
    }, 2000);
    // 假设有token，需要设置 token 令牌
    // config.headers["user-token"] = "asdfasf";
    // 对响应数据做点什么
    if (response.data.code === 666) {
      return response;
    } else {
      Message({
        message: response.data.msg,
        type: "error",
      });
      return Promise.reject(response.data.msg);
    }
  },
  (error) => {
    Vue.nextTick(() => {
      // 以服务的方式调用的 Loading 需要异步关闭
      loadObj.close();
    });
    Message({
      message: error,
      type: "error",
    });
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

// 输出
export default service;
